package core

import (
	// "github.com/casbin/casbin/v2"
	"github.com/spf13/viper"
	"go.uber.org/zap"
	"gorm.io/gorm"
)

var (
	L *zap.SugaredLogger
	D *gorm.DB
	V *viper.Viper
	C Config
	// E *casbin.Enforcer
	M *gorm.DB
)

func New(env string) {
	V = NewViper(env)
	L = NewZap()
	D = NewGorm("sqlite") // postgres sqlite memory
	M = NewGorm("memory") // 这是一个临时内存数据库句柄，用来处理临时数据
}

func Close() {
	// 程序退出前将缓存日志写入文件
	defer func() {
		// 最后退出日志，defer在最前
		err := L.Sync()
		if err != nil {
			panic("缓存日志写入失败")
		}
	}()

	// 程序退出前关闭数据库连接
	// TODO gorm.io/gorm 是否需要关闭待研究文档
	defer func() {
		sqlDB, _ := D.DB()
		if err := sqlDB.Close(); err != nil {
			panic("数据库关闭失败")
		}
	}()
}
